package other;

/**
 * 替换空格
 * 将一个字符串中的空格替换成 "%20"。
 * <p>
 * Input:
 * "A B"
 * <p>
 * Output:
 * "A%20B"
 *
 *  * <p>
 *  *     解题思路：
 *  *      通过原始的字段构建一个新的字段如下
 *  *      原始字段： "A B"
 *  *      新的字段:  "A B  "(就是循环上面的字段，发现一个空格就往原始字段后面添加两个空格，因为%20是占三个字符，添加两个空格和原来的一个加上一共三个)
 *  *      最后结果：  "A20%B"
 *  *      然后就循环原始字段，从右往左循环，，依次把字符放到新的字段后面，如果发现空格就用%20替换
 *
 * @Author Gavin
 * @date 2022.08.06 14:44
 */
public class solution_7 {
    public static String solution(StringBuffer str1){
        if(str1==null||str1.length()==0)return "";
        StringBuffer str=new StringBuffer(str1);
        for (int i = 0; i < str1.length(); i++) {
            if(str1.charAt(i)==' '){
                str.append("  ");
            }
        }
        int q=str.length()-1;
        /**
         * 临界值条件分析：
         * 首先p1>=0就不用说了
         * 第二个p2要大于p1的目的就是是为了效率，因为如果是下面的这种状态比较就没有意以了
         * p1=ABCDEFG
         * p2=ABCDEFG
         */
        int p=str1.length()-1;
        while (p>=0&&q>p){
            char c=str1.charAt(p);
            if(c==' '){
                str.setCharAt(q--,'%');
                str.setCharAt(q--,'2');
                str.setCharAt(q--,'0');
            }else{
                str.setCharAt(q--,c);
            }
            p--;
        }
        return str.toString();
    }

    public static void main(String[] args) {
        System.out.println(solution(new StringBuffer("AB C")));
    }
}
